import request from "../../../utils/request";
import PubSub from 'pubsub-js'
import moment from 'moment'

// 获取全局实例
const appInstance = getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    isPlay: false, // 音乐是否播放
    song: {}, // 歌曲详情对象
    musicId: '', // 音乐id
    musicLink: '', // 音乐播放连接
    currentTime: '00:00', // 音乐播放时间
    durationTime: '00:00', // 音乐时长
    currentWidth: 0, // 实时进度条宽度
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 创建控制音乐播放的实例
    this.backgroundAuidioManager = wx.getBackgroundAudioManager();
    // console.log(options);
    // options: 用于接收路由跳转参数
    let musicId = options.song;
    this.setData({
      musicId
    })
    // console.log(musicId);
    this.getMusicInfo(musicId);

    // 判断当前页面音乐是否在播放
    if(appInstance.globalData.isMusicPlay && appInstance.globalData.musicId === musicId){
      this.modificationIsPlay(true);
    }else{ // 不是用来的音乐将停止音乐和更新播放时间与进度条
      // 关闭当前
      this.backgroundAuidioManager.pause();
      // 将进度条还原
      this.restoreProgressBar();
    }

   
    // 问题：用户名操作系统控制音乐播放，页面不知道
    // 解决方案： 
    //   1. 通过控制音频的实例去监听音乐的播放/暂停
    // 播放
    this.backgroundAuidioManager.onPlay(() => {
      // console.log("播放");
      this.changePlayState(true);

      // 修改全局音乐id
      appInstance.globalData.musicId = musicId;
    });
    // 暂停
    this.backgroundAuidioManager.onPause(() => {
      // console.log("暂停");
      this.changePlayState(false);
    });
    // 停止
    this.backgroundAuidioManager.onStop(() => {
      // console.log("暂停");
      this.changePlayState(false);
    });
    // 监听音乐实时播放的进度
    this.backgroundAuidioManager.onTimeUpdate(() => {
      // console.log('总时长：', this.backgroundAuidioManager.duration);
      // console.log('实时播放进度：', this.backgroundAuidioManager.currentTime);
      // this.changePlayState(false);
      let currentWidth = this.backgroundAuidioManager.currentTime/this.backgroundAuidioManager.duration * 450;
      let currentTime = moment(this.backgroundAuidioManager.currentTime * 1000).format('mm:ss');
      this.setData({
        currentTime,
        currentWidth
      })
    });
    // 监听音乐自动播放结束
    this.backgroundAuidioManager.onEnded(() => {
      // 自动切换下一首，并且自动播放
      this.publishRecommendSong('next');
      // 订阅recommendSong页面的musicId
      this.subscribeRecommendSong();
      // 将进度条还原
      this.restoreProgressBar();
      this.musicControl(true,musicId,null);
    });
  },

  // 修改播放状态的功能函数
  changePlayState(isPlay){
    // 修改全局音乐播放状态
    appInstance.globalData.isMusicPlay = isPlay;
    this.modificationIsPlay(isPlay);
  },
  
  // 点击播放/暂停的回调
  handleMusicPlay() {
    let isPlay = !this.data.isPlay;
    // // 修改是否播放的状态
    // this.setData({
    //   isPlay
    // })
    let {musicId,musicLink} = this.data;
    this.musicControl(isPlay, musicId,musicLink);
  },

  // 获取音乐详情的功能函数
  async getMusicInfo(musicId) {
    let songData = await request('/song/detail', {ids: musicId});
    // 总时长动态显示，使用了第三方包moment
    let durationTime = moment(songData.songs[0].dt).format('mm:ss');
    this.setData({
      song: songData.songs[0],
      durationTime
    })

    // 动态修改窗口标题
    wx.setNavigationBarTitle({
      title: this.data.song.name,
    })
  },

  // 控制音乐播放/暂停的功能函数
  async musicControl(isPlay, musicId,musicLink){
    if(isPlay){ // 播放
      if(!musicLink){
        // 获取音乐播放连接
        let musicLinkData = await request('/song/url', {id: musicId});
        musicLink = musicLinkData.data[0].url;
        this.setData({
          musicLink
        })
      }
      this.backgroundAuidioManager.src = musicLink;
      this.backgroundAuidioManager.title = this.data.song.name;
    }else { // 暂停
      this.backgroundAuidioManager.pause();
    }
  },

  // 点击切换歌词
  handleSwitch(event){
    let type = event.currentTarget.id;
    // console.log(type);
    // 关闭当前
    this.backgroundAuidioManager.pause();
    // 订阅recommendSong页面的musicId
    this.subscribeRecommendSong();
    // 发布消息给recommendsong页面
    this.publishRecommendSong(type);
  },

  // 订阅recommendSong页面的musicId
  subscribeRecommendSong(){
    PubSub.subscribe('musicId', (msg,musicId) =>{
      // console.log(musicId);
      this.getMusicInfo(musicId);
      this.musicControl(true,musicId,null);
      PubSub.unsubscribe('musicId');
    })
  },

  // 发布消息给recommendsong页面
  publishRecommendSong(type){
    PubSub.publish('switchType', type);
  },

  // 将进度条还原
  restoreProgressBar(){
    this.setData({
      currentWidth: 0,
      currentTime: '00:00'
    })
  },

  // 修改data播放状态
  modificationIsPlay(isPlay){
    this.setData({
      isPlay
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})